package com.lap.auth.domain.user.repository;

import java.util.Optional;
import com.lap.auth.domain.user.User;

/**
 * <strong> 仓库接口 </strong>
 *
 * <ol>
 * <li>使用规则
 * <ul>
 * <li>提供聚合根下一个完整的操作，例如：订单和订单明细行
 * <li>缓存也应该在这层的实现类
 * </ul>
 * <li>命名规范
 * <ul>
 * <li>接口语义就是数据库操作行为
 * <li>命名规范类似 JPA/MyBatis
 * <li>查询分页：findByCondition()
 * <li>查询单个：findById()
 * <li>保存/更新单个：save()
 * <li>保存/更新批量（性能方面的考量）：saveBatch()
 * <li>修改某些单独字段（性能方面的考量）：updateXXById()
 * <li>逻辑删除：deleteById(id)/delete(Object)
 * <li>物理删除：removeById(id)
 * </ul>
 * </ol>
 *
 * @author Shuisheng Lao(劳水生)
 * @version 0.0.1
 */
public interface UserRepository {

  User save(User user);

  int deleteById(Integer id);

  Optional<User> findById(Integer userId);

  Optional<User> findByUsername(String username);
}
